// API管理相关函数 - 第1部分

// 全局变量
let currentPage = 1;
let perPage = 10;

// 安全的toastr通知函数
function showToast(type, message) {
    if (typeof toastr !== 'undefined') {
        toastr[type](message);
    } else {
        // 如果toastr未定义，使用原生alert
        alert(`${type.toUpperCase()}: ${message}`);
    }
}

// 配置toastr
function configureToastr() {
    if (typeof toastr !== 'undefined') {
        toastr.options = {
            closeButton: true,
            progressBar: true,
            positionClass: 'toast-top-right',
            timeOut: 3000
        };
    }
}

// 请求体可见性控制
function updateRequestBodyVisibility() {
    const method = $('#api-method').val();
    const bodyTab = $('#body-tab');
    bodyTab.toggleClass('d-none', !['POST', 'PUT', 'PATCH'].includes(method));
}

// 初始化API模态框
function initApiModal() {
    // 配置toastr
    configureToastr();
    
    // 初始化请求体可见性
    updateRequestBodyVisibility();
    
    // 监听方法变化
    $('#api-method').off('change').on('change', updateRequestBodyVisibility);
}

// 全局初始化锁
let appInitialized = false;

// 统一初始化函数
function initializeApp() {
    if (appInitialized) return;
    appInitialized = true;
    
    // 配置toastr
    if (typeof toastr !== 'undefined') {
        toastr.options = {
            closeButton: true,
            progressBar: true,
            positionClass: 'toast-top-right',
            timeOut: 3000
        };
    }

    // 加载API列表
    loadApiList().then(function() {
        // 初始化请求体可见性
        updateRequestBodyVisibility();
    }).catch(function(error) {
        console.error('初始化加载API列表失败:', error);
        updateRequestBodyVisibility();
    });
}

// 页面加载完成后执行
$(document).ready(function() {
    // 确保所有依赖就绪
    const checkDependencies = setInterval(function() {
        if (typeof jQuery !== 'undefined' && 
            typeof bootstrap !== 'undefined' && 
            typeof toastr !== 'undefined') {
            clearInterval(checkDependencies);
            initializeApp();
        }
    }, 100);
    
    // 搜索按钮点击事件
    $('#search-btn').click(function() {
        loadApiList(1);
    });
    
    // 回车键搜索
    $('#search-input').keypress(function(e) {
        if (e.which === 13) {
            loadApiList(1);
        }
    });
    
    // 分页点击事件
    $(document).on('click', '#pagination .page-link', function(e) {
        e.preventDefault();
        const page = $(this).data('page');
        if (page) {
            loadApiList(page);
        }
    });
    
    // 新增API按钮点击事件
    $('#add-api-btn').click(function() {
        // 重置表单
        $('#add-edit-form')[0].reset();
        
        // 设置表单模式
        $('#add-edit-form').data('mode', 'add');
        $('#addEditModalLabel').text('新增API');
        
        // 显示模态框
        $('#addEditModal').modal('show');
    });
    
    // 导入API按钮点击事件
    $('#import-api-btn').click(function() {
        // 重置表单
        $('#import-form')[0].reset();
        
        // 切换到Swagger标签页
        $('#swagger-tab').tab('show');
        
        // 显示模态框
        $('#importModal').modal('show');
    });
    
    // 编辑API按钮点击事件
    $(document).on('click', '.edit-api', function() {
        const apiId = $(this).data('id');
        editApi(apiId);
    });
    
    // 查看API按钮点击事件
    $(document).on('click', '.view-api', function() {
        const apiId = $(this).data('id');
        viewApi(apiId);
    });
    
    // 删除API按钮点击事件
    $(document).on('click', '.delete-api', function() {
        const apiId = $(this).data('id');
        const apiName = $(this).closest('tr').find('td:first').text();
        
        // 设置删除确认模态框
        $('#delete-api-id').val(apiId);
        $('#delete-api-name').text(apiName);
        
        // 显示删除确认模态框
        $('#deleteModal').modal('show');
    });
    
    // 删除事件绑定已移至index.html，这里不再重复绑定
    
    // 请求方法切换事件
    $('#api-method').change(function() {
        updateRequestBodyVisibility();
    });
    
    // 初始化请求体可见性
    updateRequestBodyVisibility();
});

// 加载API列表
function loadApiList(page = 1) {
    currentPage = page;
    
    const searchQuery = $('#search-input').val();
    
    return $.ajax({
        url: '/api/data',
        method: 'GET',
        data: {
            search: searchQuery,
            page: page,
            per_page: perPage
        },
        success: function(response) {
            renderApiList(response.apis);
            renderPagination(response.pagination);
        },
        error: function(error) {
            console.error('加载API列表失败:', error);
            showToast('error', '加载API列表失败');
        }
    });
}

// 全局导出函数
window.loadApiList = loadApiList;

// 渲染API列表
function renderApiList(apis) {
    const apiList = $('#api-list');
    apiList.empty();
    
    if (apis.length === 0) {
        apiList.append('<tr><td colspan="7" class="text-center">暂无数据</td></tr>');
        return;
    }
    
    apis.forEach(api => {
        const methodBadgeClass = {
            'GET': 'bg-success',
            'POST': 'bg-primary',
            'PUT': 'bg-warning',
            'DELETE': 'bg-danger',
            'PATCH': 'bg-info'
        };
        
        // 将标签数组转换为字符串显示
        const tagsDisplay = Array.isArray(api.tags) && api.tags.length > 0 ? api.tags.join(', ') : '-';
        
        apiList.append(`
            <tr data-id="${api.id}">
                <td>${api.name}</td>
                <td><span class="badge ${methodBadgeClass[api.method] || 'bg-secondary'}">${api.method}</span></td>
                <td>${api.path}</td>
                <td>${tagsDisplay}</td>
                <td>${formatDate(api.updated_at)}</td>
                <td>
                    <button class="btn btn-sm btn-primary edit-api" data-id="${api.id}" title="编辑">
                        <i class="bi bi-pencil"></i> 编辑
                    </button>
                    <button class="btn btn-sm btn-danger delete-api" data-id="${api.id}" title="删除">
                        <i class="bi bi-trash"></i> 删除
                    </button>
                </td>
            </tr>
        `);
    });
}

// 导入API
// 清理curl命令中的特殊字符
function cleanCurlCommand(curl) {
    // 移除Windows风格的转义字符(^)
    curl = curl.replace(/\^/g, '');
    // 处理转义引号
    curl = curl.replace(/\\"/g, '"');
    // 移除多余空格
    return curl.trim();
}

function importApi() {
    const importType = $('input[name="import-type"]:checked').val();
    let importContent = $('#import-content').val();
    
    if (!importContent) {
        showToast('error', '请输入导入内容');
        return;
    }

    // 如果是curl命令，先清理特殊字符
    if (importType === 'curl') {
        importContent = cleanCurlCommand(importContent);
    }

    $.ajax({
        url: '/api/import',
        method: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({
            type: importType,
            content: importContent
        }),
        beforeSend: function() {
            // 显示加载状态
            $('#importModal .modal-footer button[type="submit"]')
                .prop('disabled', true)
                .html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> 导入中...');
        },
        success: function(response) {
            if (response.success) {
                showToast('success', response.message || '导入成功');
                $('#importModal').modal('hide');
                loadApiList();
            } else {
                showToast('error', response.message || '导入失败');
            }
        },
        error: function(error) {
            console.error('导入API失败:', error);
            showToast('error', '导入API失败');
        },
        complete: function() {
            // 恢复按钮状态
            $('#importModal .modal-footer button[type="submit"]')
                .prop('disabled', false)
                .text('导入');
        }
    });
}

// 保存API
function saveApi() {
    const formData = {
        name: $('#api-name').val(),
        method: $('#api-method').val(),
        path: $('#api-path').val(),
        tags: $('#api-tags').val(),
        description: $('#api-description').val(),
        headers: $('#api-headers').val(),
        params: $('#api-params').val(),
        body: $('#api-body').val(),
        response: $('#api-response').val()
    };

    // 验证必填字段
    if (!formData.name || !formData.method || !formData.path) {
        showToast('error', '请填写必填字段');
        return;
    }

    // 尝试解析JSON字段
    try {
        formData.headers = JSON.parse(formData.headers || '{}');
        formData.params = JSON.parse(formData.params || '{}');
        formData.body = JSON.parse(formData.body || '{}');
        formData.response = JSON.parse(formData.response || '{}');
    } catch (e) {
        showToast('error', 'JSON格式错误: ' + e.message);
        return;
    }

    const isEdit = $('#add-edit-form').data('mode') === 'edit';
    // 编辑模式下获取API ID
    const apiId = $('#add-edit-form').data('id');

    $.ajax({
        url: isEdit ? `/api/${apiId}` : '/api',
        method: isEdit ? 'PUT' : 'POST',
        contentType: 'application/json',
        data: JSON.stringify(formData),
        beforeSend: function() {
            $('#addEditModal .modal-footer button[type="submit"]')
                .prop('disabled', true)
                .html('<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> 保存中...');
        },
        success: function(response) {
            if (response.success) {
                showToast('success', response.message || '保存成功');
                $('#addEditModal').modal('hide');
                loadApiList(currentPage);
            } else {
                showToast('error', response.message || '保存失败');
            }
        },
        error: function(error) {
            console.error('保存API失败:', error);
            showToast('error', '保存API失败');
        },
        complete: function() {
            $('#addEditModal .modal-footer button[type="submit"]')
                .prop('disabled', false)
                .text('保存');
        }
    });
}

// 全局导出函数
window.saveApi = saveApi;
window.importApi = importApi;

// 格式化日期
function formatDate(dateString) {
    if (!dateString) return '-';
    const date = new Date(dateString);
    return date.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit'
    });
}

// 确认删除API
function confirmDeleteApi(apiId, apiName) {
    console.log('确认删除API ID:', apiId, '名称:', apiName);
    $('#confirm-delete-btn').attr('data-id', apiId);  // 使用attr而不是data
    $('#delete-api-name').text(apiName);
    $('#deleteModal').modal('show');
}

// 删除API
function deleteApi(apiId) {
    console.log('删除API ID:', apiId);
    $.ajax({
        url: `/api/${apiId}`,
        method: 'DELETE',
        success: function(response) {
            console.log('删除API响应:', response);
            if (response.success) {
                showToast('success', response.message || 'API删除成功');
                $('#deleteModal').modal('hide');
                loadApiList(currentPage);
            } else {
                showToast('error', response.message || 'API删除失败');
            }
        },
        error: function(xhr, status, error) {
            console.error('API删除失败:', xhr, status, error);
            console.error('响应状态:', xhr.status);
            console.error('响应文本:', xhr.responseText);
            showToast('error', `API删除失败: ${xhr.status} ${error}`);
        }
    });
}

// 全局导出删除函数
window.confirmDeleteApi = confirmDeleteApi;
window.deleteApi = deleteApi;

// 渲染分页
function renderPagination(pagination) {
    const paginationEl = $('#pagination ul');
    paginationEl.empty();
    
    // 更新分页信息
    const start = (pagination.current_page - 1) * pagination.per_page + 1;
    const end = Math.min(pagination.current_page * pagination.per_page, pagination.total_items);
    $('#pagination-info').text(`显示 ${start}-${end} 条，共 ${pagination.total_items} 条`);
    
    // 上一页
    paginationEl.append(`
        <li class="page-item ${pagination.current_page === 1 ? 'disabled' : ''}">
            <a class="page-link" href="#" data-page="${pagination.current_page - 1}">上一页</a>
        </li>
    `);
    
    // 页码
    for (let i = 1; i <= pagination.total_pages; i++) {
        if (
            i === 1 || 
            i === pagination.total_pages || 
            (i >= pagination.current_page - 2 && i <= pagination.current_page + 2)
        ) {
            paginationEl.append(`
                <li class="page-item ${i === pagination.current_page ? 'active' : ''}">
                    <a class="page-link" href="#" data-page="${i}">${i}</a>
                </li>
            `);
        } else if (
            i === pagination.current_page - 3 || 
            i === pagination.current_page + 3
        ) {
            paginationEl.append(`
                <li class="page-item disabled">
                    <a class="page-link" href="#">...</a>
                </li>
            `);
        }
    }
    
    // 下一页
    paginationEl.append(`
        <li class="page-item ${pagination.current_page === pagination.total_pages ? 'disabled' : ''}">
            <a class="page-link" href="#" data-page="${pagination.current_page + 1}">下一页</a>
        </li>
    `);
}